/*
 * @Author: sunnie.Song 
 * @Date: 2018-01-08 10:01:46
 * @Description: 接口签名说明文档 
 */

import MD5 from './md5';
/**
 *对排序后的key值取值并生成
 */
function objKeySort(obj) {
  //将obj中的所有key取出放入数组中,并按照ASCII排序 返回排序后的数组
  var newKey = Object.keys(obj).sort();

  var sortString = "";
  //将obj转化为排序后的键值对使用'key=value&key=value'方式转为字符串
  for (var i = 0; i < newKey.length; i++) {
    sortString = sortString + newKey[i] + "=" + obj[newKey[i]] + "&";
  }
  //返回字符串去除最有一个'&'
  return sortString.substring(0, sortString.length - 1);
}

/**
 * 将参数打包
 * apiName: 接口名称
 * param: 参数obj 可选 
 * isReturnStr: Boolean 可选  post是否返回string 
 */
function baleParams(apiName, param, isReturnStr) {

  //获取系统当前时间戳(精确到毫秒13位) //1511257250001
  var timestamp = new Date().valueOf();
  /**
   * appId ： 10010  系统账号 （参与签名）
   * appSecret ：10011 系统账号密码（参与签名）
   * apiName :接口名称（参与签名）
   * paramMap : 接口参数json格式 （参与签名,没有则不参与）
   */

  var paramObj = new Object();
  paramObj.appId = "Pc690487e95992c395633866b";
  paramObj.appSecret = "01d552de9b864547b7e67d44568caeb9";
  paramObj.apiName = apiName;
  paramObj.timeStamp = timestamp;
  //post方法
  if (param !=undefined) {
    //将参数转为json字符串
    paramObj.paramMap = JSON.stringify(param);
  }

  //参数按ASCII排序,返回使用'=','&'拼接的字符串
  var sort = objKeySort(paramObj);
  //将排序好的字符串使用MD5签名,并返回大写字符串
  var sign = MD5.hexMD5(sort).toLocaleUpperCase();
  //将appid, apiname, 时间戳 ,签名 重新作为参数传给服务器
  var parameters = new Object();
  parameters.appId = "Pc690487e95992c395633866b";
  //parameters.appSecret = "01d552de9b864547b7e67d44568caeb9";
  parameters.timeStamp = timestamp;
  parameters.apiName = apiName;
  parameters.sign = sign;
  if (param != undefined) {
    //将参数转为json字符串
     parameters.paramMap =JSON.stringify(param);
  }
 //get方法或者post  返回字符串
 if (param == undefined || isReturnStr == true)  {
    var strParams = "?";
    for (var key in parameters) {
      strParams += key + "=" + parameters[key] + "&";
    }
    parameters = strParams.substr(0, strParams.length - 1);
  }
  return parameters;
}
export default baleParams;
